class Apple {
    int peel_count = 0;
    Apple peel(int i) {
        System.out.println("peeling " + i);
        peel_count += 1;
        return this;
    }

    void eat(String s) {
        peel(s.length());
        this.peel(s.length());
    }

    void print() {
        System.out.println(peel_count);
    }

}


public class ThisDemo {
    public static void main(String[] args) {
        Apple a = new Apple();
        Apple b = new Apple();
        a.peel(1);
        b.peel(2);
        a.eat("Apple");
        /*
        方法peel()其实有一个隐藏参数this，位于所有显式参数之前，代表着被操作对象的引用。
        因此，当调用a.peel(1)时，实际上是调用了Apple.peel(a, 1)，
        而当调用b.peel(2)时，实际上是调用了Apple.peel(b, 2)。
        因此，上面的代码等价于：
        Apple.peel(a, 1);
        Apple.peel(b, 2);
         */

        a.peel(1).peel(2).print();
    }
}
